﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insifo.WE;
using System.Text.RegularExpressions;
using System.Collections.Specialized;

public partial class genTipoCambioMensualEditar : ObjectPage
{
    #region CONSTANTES

    private const string RUTA_LISTA = "~/gen/genTipoCambioMensualListar.aspx";

    #endregion

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        //Eventos del Master
        Master.MenuAccionEvento += new MasterPageMenuEditarClickHandler(Master_MenuButton);
        if (!IsPostBack)
        {            
            Cargar();
        }
    }

    protected void Master_MenuButton(object sender, EventArgs e)
    {
        string strAccion = ((CommandEventArgs)e).CommandName;
        switch (strAccion)
        {
            case "Aceptar":
                Guardar("G");
                break;
            case "Aplicar":
                Guardar("A"); 
                break;
            case "Cancelar":
                Salir();
                break;
        }
    }


    #endregion

    #region METODOS

    protected void Cargar()
    {
        string strAccion =  Request.QueryString["a"];   //a: N-Nuevo, e-Editar, v-Ver
        string strArg = Request.QueryString["i"];  //Id
        //Eventos Java Script
        this.Master.MenuAceptar.Attributes.Add("OnClick", "javascript:return fnValidar();");

        //Carga Tipo de TipoCambioMensual
        Util.loadComboAndItem(ddlIdMonedaOrigen, ListarMoneda(), "Descripcion", "IdMoneda", "-- Seleccione --", "0");
        //carga los origenes de datos
        Util.loadComboAndItem(ddlIdMonedaDestino, ListarMoneda(), "Descripcion", "IdMoneda", "-- Seleccione --", "0");
        //Carga Estado
        Util.loadCombo(ddlEstado, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_ESTADOREGISTRO), "Descripcion", "ParametroDetalle");

        switch (strAccion)
        {
            case "n":
                Master.SubTitulo.Text =  Resources.resDiccionario.Nuevo;
                Nuevo();
                break;
            case "e":
                Master.SubTitulo.Text =  Resources.resDiccionario.Editar;
                Editar(strAccion, strArg);
                break;
            case "d":
                Master.SubTitulo.Text =  Resources.resDiccionario.Inactivar;
                Editar(strAccion, strArg);
                break;
            default:
               Master.SubTitulo.Text =  Resources.resDiccionario.Unknow;
                break;
        }
    }

    protected void Nuevo()
    {
        hfIdMonedaOrigen.Value = "0";
        hfIdMonedaDestino.Value = "0";
        hfPeriodo.Value = "0";
        hfAccion.Value = "n"; //Nuevo

        txtPeriodo.Text = string.Empty;
        txtValorVenta.Text = string.Empty;

        //Datos de Auditoria
        ddlEstado.SelectedIndex = 0; //Representa el primero
        txtUsuarioCreacion.Text = string.Empty;
        txtFechaCreacion.Text = string.Empty;
        txtUsuarioModificacion.Text = string.Empty;
        txtFechaModificacion.Text = string.Empty;
    }

    protected void Editar(string pstrAccion, string pstrArg )
    {
        string[] strArgs = pstrArg.Split('|');

        int pinIdMonedaOrigen = int.Parse(strArgs[0]);
        int pinIdMonedaDestino = int.Parse(strArgs[1]);
        string pstrPeriodo = strArgs[2];
        
        WCTipoCambioMensual.BETipoCambioMensual be = new WCTipoCambioMensual.BETipoCambioMensual
        {
            IdMonedaOrigen = pinIdMonedaOrigen,
            IdMonedaDestino = pinIdMonedaDestino,
            Periodo = pstrPeriodo
        };
        be = ObtenerTipoCambioMensual(be);

        hfIdMonedaOrigen.Value = pinIdMonedaOrigen.ToString();
        hfIdMonedaDestino.Value = pinIdMonedaDestino.ToString();
        hfPeriodo.Value = pstrPeriodo;
        hfAccion.Value = pstrAccion; //Editar/Eliminar

        txtPeriodo.Text = pstrPeriodo;
        Util.SelectCombo(ddlIdMonedaOrigen, be.IdMonedaOrigen.ToString());
        Util.SelectCombo(ddlIdMonedaDestino, be.IdMonedaDestino.ToString());

        txtValorCompra.Text = be.ValorCompra.ToString();
        txtValorVenta.Text = be.ValorVenta.ToString();
        txtValorMayorizar.Text = be.ValorMayorizar.ToString();
        txtValorSBSOperaciones.Text = be.ValorSBSOperaciones.ToString();
        
        txtIndiceAjuste.Text = be.IndiceAjuste.ToString();
        txtIndiceAcumAjuste.Text = be.IndiceAcumAjuste.ToString();
        txtFactorAjuste.Text = be.FactorAjuste.ToString();

        txtValorROF.Text = be.ValorROF.ToString();
        txtPIB.Text = be.PIB.ToString();
        txtInflacion.Text = be.Inflacion.ToString();
        txtUIT.Text = be.UIT.ToString();


        //Datos de Auditoria
        Util.SelectCombo(ddlEstado,be.Estado);
        txtUsuarioCreacion.Text = be.UsuarioCreacion;
        txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
        txtUsuarioModificacion.Text = be.UsuarioModificacion;
        txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

        if (pstrAccion == "d")
        {
            Master.MenuAplicar.Visible = false; //Remueve el boton aplicar
            txtPeriodo.Enabled = false;
            ddlIdMonedaDestino.Enabled = false;
            ddlIdMonedaOrigen.Enabled = false;

            ddlEstado.Enabled = false;

            if (be.Estado == Constantes.ESTADO_ACTIVO)
            {
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_INACTIVO);
            }
            else
            {
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_ACTIVO);
            }
        }

        txtPeriodo.Enabled = false;
        ddlIdMonedaDestino.Enabled = false;
        ddlIdMonedaOrigen.Enabled = false;
            
    }

    protected bool Validar(out WCTipoCambioMensual.BETipoCambioMensual pbe )
    {
        pbe = new WCTipoCambioMensual.BETipoCambioMensual();
        string strPeriodo = string.Empty, strIdMonedaOrigen = string.Empty, strIdMonedaDestino = string.Empty, strVigente = string.Empty;
        string strUsuario = string.Empty, strEstado = string.Empty;
        string strAccion = string.Empty, strValorCompra = string.Empty, strValorVenta = string.Empty, strValorMayorizar = string.Empty, strValorSBSOperaciones = string.Empty;
        string strIndiceAjuste = string.Empty, strIndiceAcumAjuste = string.Empty, strFactorAjuste = string.Empty, strValorROF = string.Empty, strPIB = string.Empty, strInflacion = string.Empty, strUIT = string.Empty;
        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver
        strPeriodo = txtPeriodo.Text.Trim();

        strIdMonedaOrigen = ddlIdMonedaOrigen.SelectedValue;
        strIdMonedaDestino = ddlIdMonedaDestino.SelectedValue;

        strValorCompra = string.IsNullOrEmpty(txtValorCompra.Text.Trim()) ? "0": txtValorCompra.Text.Trim() ;
        strValorVenta = string.IsNullOrEmpty(txtValorVenta.Text.Trim()) ? "0" : txtValorVenta.Text.Trim();
        strValorMayorizar = string.IsNullOrEmpty(txtValorMayorizar.Text.Trim()) ? "0" : txtValorMayorizar.Text.Trim();
        strValorSBSOperaciones = string.IsNullOrEmpty(txtValorSBSOperaciones.Text.Trim()) ? "0" : txtValorSBSOperaciones.Text.Trim();

        strIndiceAjuste = string.IsNullOrEmpty(txtIndiceAjuste.Text.Trim()) ? "0" : txtIndiceAjuste.Text.Trim();
        strIndiceAcumAjuste = string.IsNullOrEmpty(txtIndiceAcumAjuste.Text.Trim()) ? "0" : txtIndiceAcumAjuste.Text.Trim();
        strFactorAjuste = string.IsNullOrEmpty(txtFactorAjuste.Text.Trim()) ? "0" : txtFactorAjuste.Text.Trim();

        strValorROF = string.IsNullOrEmpty(txtValorROF.Text.Trim()) ? "0" : txtValorROF.Text.Trim();
        strPIB = string.IsNullOrEmpty(txtPIB.Text.Trim()) ? "0" : txtPIB.Text.Trim();
        strInflacion = string.IsNullOrEmpty(txtInflacion.Text.Trim()) ? "0" : txtInflacion.Text.Trim();
        strUIT = string.IsNullOrEmpty(txtUIT.Text.Trim()) ? "0" : txtUIT.Text.Trim();  

        strEstado = ddlEstado.SelectedValue;
        strUsuario = UsuarioSistema.CodigoUsuario;

        //Valida
        String strReg = @"^[-+]?\d+(\.\d+)?$";
        if (!Regex.IsMatch(strValorCompra, strReg))
        {
            Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgAlertaIngresarValorNumericoPresentacion )); //"la presentaci\u00F3n es un valor numérico."
            return false;
        }

        //Inicializa
        WCTipoCambioMensual.BETipoCambioMensual be = new WCTipoCambioMensual.BETipoCambioMensual
        {
            IdMonedaOrigen = int.Parse(strIdMonedaOrigen),
            IdMonedaDestino = int.Parse(strIdMonedaDestino),
            Periodo = strPeriodo,

            ValorCompra = decimal.Parse(strValorCompra),
            ValorVenta = decimal.Parse(strValorVenta),
            ValorMayorizar = decimal.Parse(strValorMayorizar),
            ValorSBSOperaciones = decimal.Parse(strValorSBSOperaciones),
            
            IndiceAjuste = decimal.Parse(strIndiceAjuste),
            IndiceAcumAjuste = decimal.Parse(strIndiceAcumAjuste),
            FactorAjuste = decimal.Parse(strFactorAjuste),
            
            ValorROF = decimal.Parse(strValorROF),
            UIT = decimal.Parse(strUIT),
            PIB = decimal.Parse(strPIB),
            Inflacion = decimal.Parse(strInflacion),

            Estado = strEstado,
            UsuarioCreacion = strUsuario,
            FechaCreacion = DateTime.Now,
            UsuarioModificacion = strUsuario,
            FechaModificacion = DateTime.Now
        };
        pbe = be;
        return true;
    }

    protected void Guardar(string pstrEvento) //G:Grabar, A:Aplicar
    {
        string strAccion = string.Empty;
        string strUsuario = string.Empty;

        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver
        strUsuario = UsuarioSistema.CodigoUsuario;

        WCTipoCambioMensual.BETipoCambioMensual be;
         
        if (!Validar(out be)) //Valida e Inicializa
        {
            return;
        }

        //Grabar
        switch (strAccion)
        {
            case "n": //Nuevo
                be = InsertarTipoCambioMensual(be);
                if (be.Error != 0)
                {
                    if (be.Error == -2)
                    {
                        Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgAlertaTipoMensualExiste)); //"El tipo de cambio mensual ya existe."
                    }
                    else
                    {
                       Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorRegistrar));
                    }
                }
                else
                {
                    hfAccion.Value = "e";
                    txtUsuarioCreacion.Text = strUsuario;
                    txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                    txtUsuarioModificacion.Text = strUsuario;
                    txtFechaModificacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                }
                break;
            case "e": //Actualiza
                be = ActualizarTipoCambioMensual(be);
                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorActualizar));
                }
                else
                {
                    txtUsuarioModificacion.Text = strUsuario;
                    txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);
                }
                break;
            case "d": //Elimina
                be = EliminaTipoCambioMensual(be);
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorActualizar));
                }
                break;
        }
      if (pstrEvento == "G") {if (be.Error == 0) { Util.Redireciona(RUTA_LISTA, "?a=l", true);} }
    }

    protected void Salir()
    {
        Util.Redireciona(RUTA_LISTA, "?a=l", true);
    }


    #endregion

    #region LLAMDAS A WEBSERVICES

    /// <summary>
    /// Método Lista Niveles de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCTipoCambioMensual.BETipoCambioMensual InsertarTipoCambioMensual(WCTipoCambioMensual.BETipoCambioMensual pbe)
    {
        WCTipoCambioMensual.BETipoCambioMensual be = new WCTipoCambioMensual.BETipoCambioMensual();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCTipoCambioMensual.IWCTipoCambioMensual>("BasicHttpBinding_IWCTipoCambioMensual"))
        {
            var response = client.ServiceOperation<WCTipoCambioMensual.BETipoCambioMensual>(c => c.Insertar(pbe));
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Obtiene Nivel de Alerta
    /// </summary>
    /// <returns>Devuelve un Objeto</returns>
    protected WCTipoCambioMensual.BETipoCambioMensual ObtenerTipoCambioMensual(WCTipoCambioMensual.BETipoCambioMensual pbe)
    {
        WCTipoCambioMensual.BETipoCambioMensual be = new WCTipoCambioMensual.BETipoCambioMensual();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCTipoCambioMensual.IWCTipoCambioMensual>("BasicHttpBinding_IWCTipoCambioMensual"))
        {
            var response = client.ServiceOperation<WCTipoCambioMensual.BETipoCambioMensual>(c => c.Obtener(pbe));
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Actualiza un Nivele de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCTipoCambioMensual.BETipoCambioMensual ActualizarTipoCambioMensual(WCTipoCambioMensual.BETipoCambioMensual pbe)
    {
        WCTipoCambioMensual.BETipoCambioMensual be = new WCTipoCambioMensual.BETipoCambioMensual();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCTipoCambioMensual.IWCTipoCambioMensual>("BasicHttpBinding_IWCTipoCambioMensual"))
        {
            var response = client.ServiceOperation<WCTipoCambioMensual.BETipoCambioMensual>(c => c.Actualizar(pbe));
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Elimina un Nivele de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCTipoCambioMensual.BETipoCambioMensual EliminaTipoCambioMensual(WCTipoCambioMensual.BETipoCambioMensual pbe)
    {
        WCTipoCambioMensual.BETipoCambioMensual be = new WCTipoCambioMensual.BETipoCambioMensual();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCTipoCambioMensual.IWCTipoCambioMensual>("BasicHttpBinding_IWCTipoCambioMensual"))
        {
            var response = client.ServiceOperation<WCTipoCambioMensual.BETipoCambioMensual>(c => c.Eliminar(pbe));
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Lista Companias
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarCompanias()
    {
        WCCompania.BECompania be = new WCCompania.BECompania();
        be.Estado = "A";
        be.Descripcion = string.Empty;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCCompania.IWCCompania>("BasicHttpBinding_IWCCompania"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar_Sel(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista Monedas
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarMoneda()
    {
        WCMoneda.BEMoneda be = new WCMoneda.BEMoneda();
        be.Descripcion = "";
        be.Estado = "A";
        be.Pagina = 0;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCMoneda.IWCMoneda>("BasicHttpBinding_IWCMoneda"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista Companias
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }
    
    #endregion




}